[LeetCode 题解]:Best Time to Buy and Sell Stock

前言

 

【LeetCode 题解】系列传送门:  http://www.cnblogs.com/double-win/category/573499.html

 

1.题目描述

Say you have an array for which the ith element is the price of a given stock on day i.

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

2. 题意

给定一个整数数组Array用以表示某股票在每一天的价格,即该数组中第i个元素表示第i天的价格。

假如用户在给定的天数内只能完成一次交易(即在某一天购买该股票,然后在另一天将其抛售)。请设计一个算法,使得用户在此交易过程中获得最大利润。

3. 思路

规则:一只股票必须先买入,然后再售出。

采用动态规划的思路:

使用两个变量记录当前最小值minPrice,以及当前最大值maxPrice。

Profit的递归过程,可以按照如下状态变换方程表示:

4: 解法

class Solution {
public:
    int maxProfit(vector<int> &prices) {
        if(prices.size()<=1) return 0;
        int min=prices.front();  // 当前最小值
        int max=prices.front(); //当前最大值
        int maxP=0; //最大profit

        for(int i=1;i<prices.size();i++){
            if(prices[i]>max){    //当前值大于max
                maxP=prices[i]-min;
                max=prices[i];
            }else if(prices[i]<min){  // 当前值比min小,那么更新min
                min=prices[i];
            }else{
                if(prices[i]-min>maxP){  // 当前值介于min~max之间
                    maxP=prices[i]-min;
                    max=prices[i];
                }
            }
        }
        return maxP;
    }
};
作者:Double_Win
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则作者保留追究法律责任的权利。  若本文对你有所帮助,您的关注推荐是我们分享知识的动力!
posted @ 2014-11-27 19:35  Double_win  阅读(191)  评论(0编辑  收藏  举报